[프로그래머스] 로또의 최고순위와 최저순위- JS

내 풀이 (성공)

  1. 중복되는 개수를 찾고 (7 - 중복개수) 하면 등수가 나온다. 이 때 주의할 점은 6등이다. 중복개수가 0일 때 6등이 나와야하는데 위 식으로 하면 7등이 나온다. 그래서 분기처리해서 6을 따로 넣어줬다. 고수의 풀이를 보니까 이 부분을 배열을 이용해서 인덱스를 등수로 매기는 식으로 풀었다.
  2. 0의 개수를 세서 위에 설명했던 등수에서 빼줬다. 5등이고 0이 3개면 최고가능등수는 (5-3) 해서 2등이 된다. 이 때 주의할 점은 lottos=[0,0,0,0,0,0]인 경우. 최고가능등수가 0등이 나온다. 그래서 || 을 걸어줘서 0이라면 1을 answer에 push 했다.
let lottos = [44, 1, 0, 0, 31, 25]
let win_nums = [31, 10, 45, 1, 6, 19]

function solution(lottos, win_nums) {
  let answer = []
  let lastHit = lottos.filter(v => win_nums.includes(v)).length
  if (lastHit > 1) {
    answer.push(7 - lastHit)
  } else {
    answer.push(6)
  }
  answer.unshift(answer[0] - lottos.filter(v => v === 0).length || 1)
  return answer
}

고수의 풀이

function solution(lottos, win_nums) {
  const rank = [6, 6, 5, 4, 3, 2, 1]

  let minCount = lottos.filter(v => win_nums.includes(v)).length // 중복개수
  let zeroCount = lottos.filter(v => !v).length

  const maxCount = minCount + zeroCount

  return [rank[maxCount], rank[minCount]]
}

Written by@Jiyon Lee
뜨거운 코드를 가르며

GitHub